package cn.lili.modules.payment.service;

import cn.lili.modules.payment.entity.dos.WechatApplyment;
import cn.lili.modules.payment.entity.dto.WechatApplymentSearchParams;
import cn.lili.modules.payment.entity.vo.FundBalanceVO;
import cn.lili.modules.payment.entity.vo.WechatApplymentVO;
import cn.lili.modules.payment.wechat.applyments.EcommerceDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * 微信进件业务层
 *
 * @author Bulbasaur
 * @since 2022/10/19
 **/
public interface WechatApplymentService extends IService<WechatApplyment> {

    /**
     * 获取微信商户进件分页
     *
     * @param wechatApplymentSearchParams 搜索参数
     * @return
     */
    IPage<WechatApplymentVO> applymentPage(WechatApplymentSearchParams wechatApplymentSearchParams);

    /**
     * 添加进件-不提交
     *
     * @param ecommerceDTO 二级商户进件申请
     */
    void addApplyment(EcommerceDTO ecommerceDTO);

    /**
     * 申请服务商
     * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_1_8.shtml
     *
     * @param ecommerceDTO 二级商户进件申请
     */
    void applyment(EcommerceDTO ecommerceDTO);

    /**
     * 修改服务商进件
     *
     * @param id           二级商户号
     * @param ecommerceDTO 二级商户进件申请
     */
    void editApplyment(String id, EcommerceDTO ecommerceDTO);

    /**
     * 获取服务商进件信息
     *
     * @param outRequestNo 业务单号
     * @return
     */
    EcommerceDTO getEcommerceDTO(String outRequestNo);

    /**
     * 同步查询进件状态
     */
    void applyments();

    /**
     * 同步查询进件状态
     * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/applyments/chapter3_2.shtml
     *
     * @param id 二级商户号
     */
    void applyments(String id);

    /**
     * 二级商户号账户实时余额
     * 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/amount.shtml
     *
     * @param subMchid 二级商户号
     */
    FundBalanceVO subNowBalance(String subMchid);

    /**
     * 导入二级商户，读取文件
     *
     * @param file
     */
    void readFile(MultipartFile file);

    /**
     * 导出列表
     *
     * @param response
     */
    void export(HttpServletResponse response);
}
